/**
 * 联合体(共用体): https://www.bilibili.com/video/BV1vs411n7TH?p=109
 * 能在同一个存储空间存储不同类型数据 的类型:
 *   1.联合体所占的内存长度 = 最长成员长度的倍数, ∴也叫共用体.
 *   2.同1个内存段可以存放几种不同类型的成员, 但每一瞬间只有1种起作用,
 * 最后1次存放的成员才起作用, 存入1个新成员后, 原有的成员的值会被覆盖.
 *   3.联合体地址 = 各成员的地址.
 *
 * 相当于前端的 Var 类型
 */
#include <stdio.h>
#include "../entity/Union_Var.h"

union {
    int i;
    char c;
    short s;
} MyUnion;              //也可以这样直接定义变量

int main() {
    union Var var;
    var.i = 5;
    var.f = 5.0435719F;
    printf("sizeof(var) = %d\n", sizeof(var));  //16
    printf("&var = %p\n", &var);        //0061FED8
    printf("&var.c = %p\n", &var.c);    //0061FED8
    printf("&var.i = %p\n", &var.i);    //0061FED8
    printf("&var.f = %p\n", &var.f);    //0061FED8
    /**
     * 打印:
     *   只有最后一次赋值正确, 其余值不正确.
     */
    printf("var: char = %c, short = %hd, int = %d, float = %f, double = %lf\n", var.c, var.s, var.i, var.f, var.d);

    MyUnion.i = 23;
    MyUnion.s = 99;
    return 0;
}